package com.dengyuanke.common.security.service;//package com.dengyuanke.common.security.service;
//
//import cn.hutool.core.util.ArrayUtil;
//import cn.hutool.core.util.StrUtil;
//import com.dengyuanke.common.core.constant.CommonConstants;
//import com.dengyuanke.common.core.constant.SecurityConstants;
//import com.dengyuanke.common.core.result.R;
//import com.dengyuanke.upms.domain.dto.UserInfo;
//import com.dengyuanke.upms.domain.entity.User;
//import com.dengyuanke.upms.domain.feign.RemoteUserService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cache.Cache;
//import org.springframework.cache.CacheManager;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.core.authority.AuthorityUtils;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
//import org.springframework.stereotype.Service;
//
//import java.util.Arrays;
//import java.util.Collection;
//import java.util.HashSet;
//import java.util.Set;
//
///**
// * Created with IntelliJ IDEA.
// *
// * @Author: dyk
// * Create time: 2019-06-10  12:50
// */
//@Service
//@Slf4j
//public class UserDetailsServiceImpl implements UserDetailsService {
//
//    @Autowired
//    private RemoteUserService remoteUserService;
//
//    @Autowired
//    private CacheManager cacheManager;
//
//    @Override
//    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//        Cache cache = cacheManager.getCache("user_details");
//        if (cache != null && cache.get(username) != null) {
//            return (MyUser) cache.get(username).get();
//        }
//        R<UserInfo> result = remoteUserService.info(username, SecurityConstants.FROM_IN);
//        UserDetails userDetails = getUserDetails(result);
//        cache.put(username, userDetails);
//        return userDetails;
//    }
//
//    /**
//     * 构建userdetails
//     *
//     * @param result 用户信息
//     * @return
//     */
//    private UserDetails getUserDetails(R<UserInfo> result) {
//        UserInfo info = result.getObj();
//        if (result == null || info == null) {
//            throw new UsernameNotFoundException("用户不存在");
//        }
//        Set<String> dbAuthsSet = new HashSet<>();
//        if (ArrayUtil.isNotEmpty(info.getRoles())) {
//            // 获取角色
//            Arrays.stream(info.getRoles()).forEach(roleId -> dbAuthsSet.add(SecurityConstants.ROLE + roleId));
//            // 获取资源
//            dbAuthsSet.addAll(Arrays.asList(info.getPermissions()));
//        }
//        Collection<? extends GrantedAuthority> authorities
//                = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0]));
//        User user = info.getUser();
//        boolean enabled = StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL);
//        // 构造security用户
//        return new MyUser(user.getId(), user.getDeptId(), user.getTenantId(), user.getUsername(), user.getPassword(), enabled,
//                true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities);
//    }
//}
